The present invention relates to a computer system with efficient memory usage for executing a plurality of application programs.
Conventional computers execute application program instructions based on a stored-program model. Application program instructions are stored in memory from which a central processing unit (CPU) sequentially reads and executes. Executing the instructions results in a series of state changes, such as changed variable values. The stored-program model may simultaneously exist at several levels: at the lowest level the CPU is executing microcode; at an intermediate level a low level application program comprising machine-code instructions is being interpreted by the CPU; and at the highest level a high level application program comprising pseudo-operations is interpreted by the low level application program. Visual Basic, C, Fortran, and Java are examples of high level application programs. A Java example may include byte-code data comprising a high-level "aplet" that is read by a Java virtual machine, which is interpreted sequentially into lower-level operating system calls, which in turn results in machine code sequences being executed by the CPU.
In personal computers, such as x-86 and PowerPC based architectures, certain elements of the operating system code may be contained in read-only memory (ROM) or stored on a disk drive from which they are executed. Application programs are generally stored on a disk drive from which they are loaded and executed, as desired. For example, the application program may be Microsoft Word or Photoshop, and the operating system may be Linux or Windows. When the computer lacks sufficient random access memory (RAM) to simultaneously store both the operating system and the application programs, alternative storage may be used to provide "virtual" memory. The alternative storage may be any suitable device, such as a hard drive or a tape drive. Virtual memory overcomes the limitation of a computer with insufficient RAM, but unfortunately is relatively slow. Elaborate systems have been developed to manage the movement of data between RAM and alternative storage in order to optimize both the use of the limited RAM and the overall execution speed. However, the "virtual" memory of the computer is still limited to the combined capacity of the RAM/ROM and alternative storage at added expense.
Application programs in embedded control systems do not generally change between executions, even over periods spanning the lifetime of the embedded control system. In such cases, the application program may be economically stored in ROM. However, such embedded control systems still require a limited amount of RAM capacity to store application program variables which change during the execution of the application program. Many such embedded control systems incorporate mechanisms for storing the application program variables during periods of inactivity or when the power is temporally not supplied to the system. For example, the application program variables may be stored on a disk drive or an electrically-programmable ROM (EPROM). The predetermined size and operating characteristics of the application programs in an embedded control system permits the use of RAM having a capacity merely sufficient to execute the application program, which reduces expense.
Many personal computers and embedded control systems provide the ability to save and restore the operating state of the CPU, application program(s), and application program variables when "simultaneously" executing multiple application programs. When "simultaneously" executing multiple application programs, the sharing of the limited resources of the computer system or embedded control system must be handled in a transparent manner. The different application programs and application program variables may need to be loaded into RAM and removed from RAM in an efficient manner. In addition, periodically external system inputs may require the suspension of the currently executing application program to execute an alternative application program. Many such computer systems and embedded control systems incorporate mechanisms for accommodating the execution of multiple application programs.
Ecker, Jr. et al., U.S. Pat. No. 4,291,388, disclose the use of electrically-alterable ROM to contain the contents of both user control program RAM and an I/O image table that depicts the status of the controller.
Kirrmann, U.S. Pat. No. 4,905,196, discloses the use of an auxiliary memory or memories to save status information at periodic recovery points, thus permitting the main process to be restarted in the event of a fault.
Arroyo et al., U.S. Pat. No. 4,907,150, disclose the use of a special save area to hold system state information upon power down. The special save area of memory is supplied with power even when the main power if off.
Enoki et al., U.S. Pat. No. 5,386,552, disclose the use of a mass storage device to hold the processing state of a system when a triggering event occurs.
Garney, U.S. Pat. No. 5,471,624, discloses the use of a device for judging whether the restoration of saved state information was correct, so that the system may or may not resume operation after an interruption, based upon the integrity of the restoration.
Pearce, U.S. Pat. No. 5,754,853, discloses the storage of system state to disk, permitting the operation of utility programs and reactivation of the original system state.
Skelton et al., U.S. Pat. No. 4,459,662, disclose a system in which the ROM memory has greater capacity than the RAM memory, so that only segments of the ROM program may be read at a time. A mechanism is described for re-utilizing areas of RAM no longer required for instruction execution.
Lenoski, U.S. Pat. No. 4,825,356, discloses the use of an onboard ROM to provide microcode instructions while the RAM is used for other purposes.
Schieve et al., U.S. Pat. No. 5,530,847, disclose loading program instructions from a non-volatile memory into RAM for execution, especially when the program code is stored in compressed form.
Kanematsu et al., U.S. Pat. No. 5,575,174, disclose the use of multiple suspend files to save multiple system states, with a cross-session data file monitor.
Einhorn et al., U.S. Pat. No. 5,136,631, disclose the transfer of code, under the control of a first system, into the memory of a second system , from which the code is executed to provide telephone control.
Raasch et al., U.S. Pat. No. 5,408,624, disclose the transfer of code from a main CPU to a peripheral controller, from which the code can be executed.
Reuter, U.S. Pat. No. 5,754,863, discloses the transfer of code from a master microprocessor to a slave microprocessor for execution in RAM, where the slave microprocessor does not require any instruction codes in ROM.
Brown et al., U.S. Pat. No. 5,682,550, disclose the creation of a non-volatile storage containing the states of several independent software entities.